"""
这个文件主要定义、规范玩家类
玩家有以下几种方法：
1。取牌 -> 一组Poke对象
    1。1向谁申请牌组？
    2。牌组作为参数传入
2。计算牌组分数
"""
import socket
import pickle
from Rule import MyDeck,Operation



class Player(socket.socket):
    """
    玩家类其实就是一个完整的客户端，它主要的功能有以下几点：
    1。接收服务器的指令，这个是从程序启动到程序结束一直运行的，几乎贯穿整个程序生命周期。
    2。向服务器发送操作指令，这个是有限制的，只有拿到了允许操作指令时，才可以向服务器发送指令。
    3。实在不行了，我不玩了，退出。因为主线程已经在接收服务器信息了，必须得再开一个线程来完成。
    """
    def __init__(self,id_,name,address):
        super().__init__(family=2, type=1, proto=0, fileno=None)
        self.id_ = id_
        self.name = name
        self.mydeck = MyDeck()
        self.connect(address)
        self.Login()

    def Login(self):
        code = Operation.login
        msg = pickle.dumps((code,self.id_,self.name,b"None",b"None"))
        self.send(msg)
        try:            
            recv= self.recv(1024)
            Rcode,*Rmsg = pickle.loads(recv) #服务器此时发来代码，信息，还有三张牌
            if Rcode == 200:
                RRmsg,*deck = Rmsg
                self.mydeck.ExtendDeck(deck)
            else:
                print(Rmsg)
                raise Exception("服务器发来错误的代码",Rcode)
        except Exception as err:
            print(err)
        
    def RecvFromServer(self):
         pass

    def SendToServer(self):
        
         pass




if __name__ == '__main__':
    host = "127.0.0.1"
    port = 54321
#    id_ = input("please enter your id:")
#    name = input("please enter your name:")
    id_ = "001"
    name = "aaa"
    address = (host,port)
    p = Player(id_,name, address )
    print(p.mydeck.cards)

#    p.login()
#    while 1:
#        print(p.RecvFromServer())
#    print(p.Pokes)
#    client.close()
    